<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        // var fn1 = undefined
        // function fn() {
        //     console.log(123)
        // }
        // var a = undefined
        // // 函数声明
        // fn()




        // console.log(a)

        // a = 666

        // console.log(fn)
        // 函数表达式


        //     fn1 = function () {
        //         console.log(11111)
        //     }

        //    fn1()

        // var obj = {
        //     fn: function () {
        //         console.log(123)
        //     }
        // }

        // obj.fn()


        // function Fn(){

        // }

        // new Fn()

        // function fn() {
        //     // console.log(123)

        //     return 



        //     // return undefined
        // }


        // var result = fn()
        // console.log(result)

        // function fn(a, _a, $a) {
        //     // a _a  $a  形参
        //     // console.log($a)
        //     console.log(arguments)
        // }
        // fn(1, "", 3, 4)


        /*案例1:封装一个函数，求任意个数字相加的和,并在控制台输出结果*/

        // function fn() {
        //     // console.log(arguments)
        //     var sum = 0;
        //     for (var i = 0; i < arguments.length; i++) {
        //         // console.log(arguments[i])
        //         sum += arguments[i]
        //     }

        //     return sum
        // }

        // console.log(fn(1, 2, 3, 4))
        // console.log(fn(1,2,3))


        // console.log(fn(21, 2, 23, 24, 123))

        /**案例2:
        * 封装一个函数，检测任意个参数的类型
        * 如果是数字则相加，如果是字符串则拼接，其它类型不执行任何操作
        * 最后将数字相加的结果拼接在字符串后面，用‘|’隔开 ,并返回
        */


        // function fn() {
        //     var sum = 0;
        //     var str = ""
        //     for (var i = 0; i < arguments.length; i++) {   //循环总的实参列表
        //         // console.log(arguments[i])
        //         if (typeof arguments[i] == "number") {
        //             // 传入的实参是数字类型
        //             sum += arguments[i]
        //         } else if (typeof arguments[i] == "string") {
        //             // 传入的实参是字符串
        //             str += arguments[i]
        //         }
        //     }
        //     return str + "|" + sum

        //     // console.log(sum)
        //     // console.log(str)
        //     // console.log(str + "|" + sum)
        // }
        // console.log(fn(1, "1", "2", 3))
        // // 12|4
        // console.log(fn(2, 9, 6, "3", 6, "2", "y", 5))
        // sum = 28
        // str = 32y
        // 32y|28


        //     * 案例1：
        //  * 封装一个函数，传入两个参数，第一个参数表示循环的起始值，
        //  * 第二个参数表示循环的终止值，用来计算从起始值到终止值之间的和，
        //  * 例如两个参数分别为start和end，如：start为1，end为10，就计算1到10之间所有数的和，(包括1和10)
        //     * 最终将计算出来的结果返回。


        // function fn(start, end) {
        //     var sum = 0;
        //     for (var i = start; i <= end; i++) {
        //         sum += i
        //     }
        //     // console.log(sum)
        //     return sum
        // }


        // console.log(fn(1, 10))

        // console.log(fn(98, 1000))

        /*案例2:封装一个函数，对传过来的参数进行判断，返回参数的类型*/
        // 如果没有参数，默认返回false
        // 如果参数是string，返回 '字符串'
        // 如果参数是number，返回'数字'
        // 如果是boolean，ture返回'真'，false返回'假'（使用三元运算符）
        // 如果是undefined，返回'未定义'
        // 如果不是以上判断的几种情况，返回null

        // function fn(param) {
        //     if (param) {
        //         if (typeof param == "string") {
        //             return "字符串"

        //         } else if (typeof param == "number") {
        //             return "数字"

        //         } else if (typeof param == "boolean") {
        //             if (param) {
        //                 return "真"
        //             } else {
        //                 return "假"
        //             }
        //         } else {
        //             return null
        //         }


        //     } else {
        //         return false
        //     }
        // }
        // console.log(fn(false))

        // (function fn(a) {
        //     console.log(a)
        // }(1))


            // fn()
    </script>
</body>

</html>